"""
Case Type   : keywords
Case Name   : opengauss关键字date(非保留)，自定义数据类型名为date，部分测试点合理报错
Create At   : 2024/12/30
Owner       : @wang-tianjing1
Description :
    1.关键字date作为数据类型不带引号
    2.关键字date作为数据类型加双引号
    3.关键字date作为数据类型加单引号
    4.关键字date作为数据类型加反引号
Expect      :
    1.成功
    2.成功
    3.合理报错
    4.合理报错
History     : by wang-tianjing1 2024/12/31 对应官网资料部分关键字不能作为数据类型
              by wang-tianjing1 2025/03/17 研发代码变更，部分char、varchar等字符型的关键字可以作为数据类型
"""

import unittest


from testcase.utils.Logger import Logger
from testcase.utils.Constant import Constant
from testcase.utils.CommonSH import CommonSH


logger = Logger()
commonsh = CommonSH('dbuser')
constant = Constant()

class Hostname(unittest.TestCase):


    def setUp(self):
         logger.info("------------------------ Opengauss_Function_Keyword_Date_Case0035 开始执行--------------------------")

    # 关键字date作为数据类型不带引号，成功
    def test_text_1(self):
        SqlMdg = commonsh.execut_db_sql('''CREATE TYPE date AS (f1 int, f2 text);
                                        select typname from pg_type where typname ='date';
                                        drop type public.date;''')
        logger.info(SqlMdg)
        self.assertIn('CREATE TYPE', SqlMdg)
        self.assertIn('date', SqlMdg)


    # 关键字date作为数据类型加双引号，创建成功
    def test_text_2(self):
        SqlMdg = commonsh.execut_db_sql('''CREATE TYPE "date" AS (f1 int, f2 text);
                                        select typname from pg_type where typname ='date';
                                        drop type public."date";''')
        logger.info(SqlMdg)
        self.assertIn('date', SqlMdg)


    # 关键字date作为数据类型加单引号，合理报错
    def test_text_3(self):
        SqlMdg = commonsh.execut_db_sql('''CREATE TYPE public.'date' AS (f1 int, f2 text);
                                        select typname from pg_type where typname ='date';
                                        drop type public.'date';''')
        logger.info(SqlMdg)
        self.assertIn('ERROR:  syntax error at or near', SqlMdg)

    #关键字date作为数据类型加反引号，合理报错
    def test_text_4(self):
        SqlMdg = commonsh.execut_db_sql('''CREATE TYPE public.`date` AS (f1 int, f2 text);
                                        select typname from pg_type where typname =`date`;
                                        drop type public.`date`;''')
        logger.info(SqlMdg)
        self.assertIn('ERROR:  syntax error at or near', SqlMdg)


    def tearDown(self):
         logger.info('------------------------ Opengauss_Function_Keyword_Date_Case0035 执行结束--------------------------')